import { GridViewEngine } from './grid-view-engine';

/**
 * 视图引擎基础
 *
 * @export
 * @class GridView8Engine
 * @extends {GridViewEngine}
 */
export class GridView8Engine extends GridViewEngine {
  /**
   * 表格部件
   *
   * @type {*}
   * @memberof GridView8Engine
   */
  protected grid: any;

  /**
   * 表格部件
   *
   * @protected
   * @type {*}
   * @memberof Grid8ViewEngine
   */
  protected totalgrid: any;

  /**
   * 选中数据集
   *
   * @protected
   * @type {any[]}
   * @memberof Grid8ViewEngine
   */
  public selections: any[] = [];

  /**
   * 选中数据集
   *
   * @protected
   * @type {any[]}
   * @memberof Grid8ViewEngine
   */
  public selections2: any[] = [];

  /**
   * Creates an instance of GridView8Engine.
   * @memberof GridView8Engine
   */
  constructor() {
    super();
  }

  /**
   * 引擎初始化
   *
   * @param {*} [options={}]
   * @memberof GridView8Engine
   */
  public init(options: any = {}): void {
    this.grid = options.grid;
    this.totalgrid = options.totalgrid;
    super.init(options);
  }

  /**
   * 引擎加载
   *
   * @memberof MDViewEngine
   */
  public load(): void {
    super.load();
    this.load2();
  }

  /**
   * 加载
   *
   * @memberof Grid8ViewEngine
   */
  public load2(): void {
    if (this.getMDCtrl2()) {
      const tag = this.getMDCtrl2().name;
      this.setViewState2({ tag: tag, action: 'load', viewdata: this.view.viewparams });
    }
  }

  /**
   * 部件事件
   *
   * @param {string} ctrlName
   * @param {string} eventName
   * @param {*} args
   * @memberof GridView8Engine
   */
  public onCtrlEvent(ctrlName: string, eventName: string, args: any): void {
    if (Object.is(ctrlName, 'totalgrid')) {
      this.MD2Event(eventName, args);
    }
    super.onCtrlEvent(ctrlName, eventName, args);
  }

  /**
   * 获取多数据部件
   *
   * @returns {*}
   * @memberof GridView8Engine
   */
  public getMDCtrl(): any {
    return this.grid;
  }

  /**
   * 获取多数据部件
   *
   * @returns {*}
   * @memberof GridView8Engine
   */
  public getMDCtrl2(): any {
    return this.totalgrid;
  }

  /**
   * 删除
   *
   * @param {*} [arg={}]
   * @returns {void}
   * @memberof GridView8Engine
   */
  public removeData(items: any[] = []): void {
    const arg: KeyVal = {};
    // 获取要删除的数据集合
    if (!items || items == null || items.length === 0) {
      return;
    }

    let keys = '';
    items.forEach(item => {
      const key = item.srfkey;
      if (!Object.is(keys, '')) {
        keys += ';';
      }
      keys += key;
    });
    arg.srfkeys = keys;

    const grid: KeyVal = this.getMDCtrl();
    if (grid) {
      grid.remove(arg);
    }
  }

  /**
   * 添加数据
   *
   * @param {any[]} [items=[]]
   * @memberof Grid8ViewEngine
   */
  public addBatchData(items: any[] = []): void {
    const arg: KeyVal = {};
    // 获取要添加的数据集合
    if (!items || items == null || items.length === 0) {
      return;
    }

    let keys = '';
    items.forEach(item => {
      const key = item.srfkey;
      if (!Object.is(keys, '')) {
        keys += ';';
      }
      keys += key;
    });
    arg.srfkeys = keys;

    const grid: any = this.getMDCtrl();
    if (grid) {
      grid.addBatchData(arg);
    }
  }

  /**
   *
   *
   * @param {string} eventName
   * @param {*} [args={}]
   * @memberof GridView8Engine
   */
  public MDEvent(eventName: string, args: any = {}): void {
    if (Object.is(eventName, 'rowclick')) {
      // this.***()
    }
    if (Object.is(eventName, 'rowdblclick')) {
      // this.doEdit(args);
    }
    if (Object.is(eventName, 'selectionchange')) {
      // this.***()
      this.selectionChange(args);
    }
    if (Object.is(eventName, 'remove')) {
      this.load2();
    }
  }

  /**
   *
   *
   * @param {string} eventName
   * @param {*} [args={}]
   * @memberof GridView8Engine
   */
  public MD2Event(eventName: string, args: any = {}): void {
    if (Object.is(eventName, 'rowclick')) {
      // this.***()
    }
    if (Object.is(eventName, 'rowdblclick')) {
      // this.doEdit(args);
    }
    if (Object.is(eventName, 'selectionchange')) {
      // this.***()
      this.selectionChange2(args);
    }
  }

  /**
   * 选中变化
   *
   * @param {any[]} args
   * @memberof GridView8Engine
   */
  public selectionChange(args: any[]): void {
    this.selections = [...args];
  }

  /**
   * 选中变化
   *
   * @param {any[]} args
   * @memberof GridView8Engine
   */
  public selectionChange2(args: any[]): void {
    this.selections2 = [...args];
  }

  /**
   * 移动数据
   *
   * @memberof Grid8ViewEngine
   */
  public moveData() {
    this.addBatchData(this.selections2);
  }

  /**
   * 移动数据
   *
   * @memberof Grid8ViewEngine
   */
  public moveData2() {
    this.removeData(this.selections);
  }

  /**
   * 移动全部数据
   *
   * @memberof Grid8ViewEngine
   */
  public moveAllData() {
    if (this.getMDCtrl2()) {
      const items: KeyVal[] = this.getMDCtrl2().getDatas();
      this.addBatchData(items);
    }
  }

  /**
   * 移动全部数据
   *
   * @memberof Grid8ViewEngine
   */
  public moveAllData2() {
    if (this.getMDCtrl()) {
      const items: KeyVal[] = this.getMDCtrl().getDatas();
      this.removeData(items);
    }
  }
}
